{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input_dim:  8 , output_dim:  4 , hidden_dim:  16\n",
      "threshold:  200\n"
     ]
    }
   ],
   "source": [
    "import gym\n",
    "import numpy as np\n",
    "import torch\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "import time\n",
    "\n",
    "from collections import deque\n",
    "from agent import Agent, FloatTensor\n",
    "from replay_buffer import ReplayMemory, Transition\n",
    "from  torch.autograd import Variable\n",
    "\n",
    "# set up matplotlib\n",
    "is_ipython = 'inline' in matplotlib.get_backend()\n",
    "if is_ipython:\n",
    "    from IPython import display\n",
    "\n",
    "plt.ion()\n",
    "\n",
    "use_cuda = torch.cuda.is_available()\n",
    "FloatTensor = torch.cuda.FloatTensor if use_cuda else torch.FloatTensor\n",
    "device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n",
    "\n",
    "BATCH_SIZE = 64  \n",
    "TAU = 0.005 # 1e-3   # for soft update of target parameters\n",
    "gamma = 0.99\n",
    "LEARNING_RATE = 0.001\n",
    "TARGET_UPDATE = 10\n",
    "\n",
    "num_episodes = 20000\n",
    "print_every = 10\n",
    "hidden_dim = 16 ## 64 ## 16\n",
    "min_eps = 0.01\n",
    "max_eps_episode = 50\n",
    "\n",
    "env = gym.make('LunarLander-v2')\n",
    "env = gym.wrappers.Monitor(env, directory=\"monitors\", force=True)\n",
    "        \n",
    "space_dim =  env.observation_space.shape[0] # n_spaces\n",
    "action_dim = env.action_space.n # n_actions  \n",
    "print('input_dim: ', space_dim, ', output_dim: ', action_dim, ', hidden_dim: ', hidden_dim)\n",
    "\n",
    "threshold = env.spec.reward_threshold\n",
    "print('threshold: ', threshold)\n",
    "\n",
    "agent = Agent(space_dim, action_dim, hidden_dim)\n",
    "\n",
    "    \n",
    "def epsilon_annealing(i_epsiode, max_episode, min_eps: float):\n",
    "    ##  if i_epsiode --> max_episode, ret_eps --> min_eps\n",
    "    ##  if i_epsiode --> 1, ret_eps --> 1  \n",
    "    slope = (min_eps - 1.0) / max_episode\n",
    "    ret_eps = max(slope * i_epsiode + 1.0, min_eps)\n",
    "    return ret_eps        \n",
    "\n",
    "def save(directory, filename):\n",
    "    torch.save(agent.q_local.state_dict(), '%s/%s_local.pth' % (directory, filename))\n",
    "    torch.save(agent.q_target.state_dict(), '%s/%s_target.pth' % (directory, filename))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def run_episode(env, agent, eps):\n",
    "    \"\"\"Play an epsiode and train\n",
    "\n",
    "    Args:\n",
    "        env (gym.Env): gym environment (CartPole-v0)\n",
    "        agent (Agent): agent will train and get action        \n",
    "        eps (float): eps-greedy for exploration\n",
    "\n",
    "    Returns:\n",
    "        int: reward earned in this episode\n",
    "    \"\"\"\n",
    "    state = env.reset()\n",
    "    done = False\n",
    "    total_reward = 0\n",
    "    \n",
    "\n",
    "    while not done:\n",
    "\n",
    "        action = agent.get_action(FloatTensor([state]) , eps)\n",
    "        \n",
    "        next_state, reward, done, _ = env.step(action.item())\n",
    "\n",
    "        total_reward += reward\n",
    "\n",
    "        if done:\n",
    "            reward = -1\n",
    "                    \n",
    "        # Store the transition in memory\n",
    "        agent.replay_memory.push(\n",
    "                (FloatTensor([state]), \n",
    "                 action, # action is already a tensor\n",
    "                 FloatTensor([reward]), \n",
    "                 FloatTensor([next_state]), \n",
    "                 FloatTensor([done])))\n",
    "                 \n",
    "\n",
    "        if len(agent.replay_memory) > BATCH_SIZE:\n",
    "\n",
    "            batch = agent.replay_memory.sample(BATCH_SIZE)\n",
    "            \n",
    "            agent.learn(batch, gamma)\n",
    "\n",
    "        state = next_state\n",
    "\n",
    "\n",
    "    return total_reward\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Episode:    10 Score: -464.32665560290786  Avg.Score: -211.87, eps-greedy:  0.80 Time: 00:00:13\n",
      "Episode:    20 Score: -111.5535952817493  Avg.Score: -197.04, eps-greedy:  0.60 Time: 00:00:16\n",
      "Episode:    30 Score: -222.07050399528984  Avg.Score: -193.53, eps-greedy:  0.41 Time: 00:00:25\n",
      "Episode:    40 Score: -61.3325867261642  Avg.Score: -193.07, eps-greedy:  0.21 Time: 00:00:43\n",
      "Episode:    50 Score: -178.0840690762476  Avg.Score: -228.92, eps-greedy:  0.01 Time: 00:00:57\n",
      "Episode:    60 Score: -231.09562887204956  Avg.Score: -219.88, eps-greedy:  0.01 Time: 00:01:17\n",
      "Episode:    70 Score: -88.43051625343654  Avg.Score: -212.66, eps-greedy:  0.01 Time: 00:01:47\n",
      "Episode:    80 Score: -235.1281573072673  Avg.Score: -196.37, eps-greedy:  0.01 Time: 00:02:02\n",
      "Episode:    90 Score: 282.5547076024702  Avg.Score: -187.02, eps-greedy:  0.01 Time: 00:02:16\n",
      "Episode:   100 Score: -667.7644189418329  Avg.Score: -177.35, eps-greedy:  0.01 Time: 00:02:40\n",
      "Episode:   110 Score: 7.193894734160935  Avg.Score: -162.43, eps-greedy:  0.01 Time: 00:03:08\n",
      "Episode:   120 Score: -6.2490597938852375  Avg.Score: -153.69, eps-greedy:  0.01 Time: 00:03:38\n",
      "Episode:   130 Score: -90.9753569204464  Avg.Score: -139.19, eps-greedy:  0.01 Time: 00:04:29\n",
      "Episode:   140 Score: -89.46649319877727  Avg.Score: -123.19, eps-greedy:  0.01 Time: 00:05:04\n",
      "Episode:   150 Score: -434.99195257029476  Avg.Score: -111.71, eps-greedy:  0.01 Time: 00:05:24\n",
      "Episode:   160 Score: 206.84027805298626  Avg.Score: -96.98, eps-greedy:  0.01 Time: 00:05:45\n",
      "Episode:   170 Score: -158.34540973580977  Avg.Score: -86.71, eps-greedy:  0.01 Time: 00:05:57\n",
      "Episode:   180 Score: -101.77155613519302  Avg.Score: -83.83, eps-greedy:  0.01 Time: 00:06:14\n",
      "Episode:   190 Score: 73.12711217151669  Avg.Score: -76.45, eps-greedy:  0.01 Time: 00:06:33\n",
      "Episode:   200 Score: -74.79019823113386  Avg.Score: -70.66, eps-greedy:  0.01 Time: 00:06:47\n",
      "Episode:   210 Score: -142.25137477660783  Avg.Score: -76.91, eps-greedy:  0.01 Time: 00:07:06\n",
      "Episode:   220 Score: 155.02089209916772  Avg.Score: -71.05, eps-greedy:  0.01 Time: 00:07:33\n",
      "Episode:   230 Score: -113.30362757545277  Avg.Score: -66.89, eps-greedy:  0.01 Time: 00:07:54\n",
      "Episode:   240 Score: -98.47237322321897  Avg.Score: -66.78, eps-greedy:  0.01 Time: 00:08:08\n",
      "Episode:   250 Score: -74.87758768943549  Avg.Score: -43.86, eps-greedy:  0.01 Time: 00:08:19\n",
      "Episode:   260 Score: -160.56736898865768  Avg.Score: -46.44, eps-greedy:  0.01 Time: 00:08:33\n",
      "Episode:   270 Score: -107.55673041017143  Avg.Score: -47.35, eps-greedy:  0.01 Time: 00:08:56\n",
      "Episode:   280 Score: -129.23940079520443  Avg.Score: -50.20, eps-greedy:  0.01 Time: 00:09:11\n",
      "Episode:   290 Score: 29.041087759355612  Avg.Score: -53.19, eps-greedy:  0.01 Time: 00:09:41\n",
      "Episode:   300 Score: -123.55232243891942  Avg.Score: -56.77, eps-greedy:  0.01 Time: 00:10:18\n",
      "Episode:   310 Score: -94.29549572707919  Avg.Score: -56.12, eps-greedy:  0.01 Time: 00:10:33\n",
      "Episode:   320 Score: -79.52885747424041  Avg.Score: -57.81, eps-greedy:  0.01 Time: 00:10:57\n",
      "Episode:   330 Score: -129.34474379787008  Avg.Score: -65.89, eps-greedy:  0.01 Time: 00:11:26\n",
      "Episode:   340 Score: -65.04836624484668  Avg.Score: -70.50, eps-greedy:  0.01 Time: 00:11:47\n",
      "Episode:   350 Score: -96.21440704967421  Avg.Score: -74.39, eps-greedy:  0.01 Time: 00:12:08\n",
      "Episode:   360 Score: -45.945515846050995  Avg.Score: -79.06, eps-greedy:  0.01 Time: 00:12:30\n",
      "Episode:   370 Score: -71.52458333631157  Avg.Score: -81.32, eps-greedy:  0.01 Time: 00:12:49\n",
      "Episode:   380 Score: -73.891547323811  Avg.Score: -82.37, eps-greedy:  0.01 Time: 00:13:11\n",
      "Episode:   390 Score: -125.58766506604762  Avg.Score: -82.00, eps-greedy:  0.01 Time: 00:13:34\n",
      "Episode:   400 Score: -43.14455125591614  Avg.Score: -78.59, eps-greedy:  0.01 Time: 00:13:59\n",
      "Episode:   410 Score: -112.89178984981118  Avg.Score: -56.44, eps-greedy:  0.01 Time: 00:14:26\n",
      "Episode:   420 Score: -123.22997597223707  Avg.Score: -53.47, eps-greedy:  0.01 Time: 00:14:53\n",
      "Episode:   430 Score: -17.674071593965937  Avg.Score: -41.19, eps-greedy:  0.01 Time: 00:15:29\n",
      "Episode:   440 Score: 200.9508703631388  Avg.Score: -27.63, eps-greedy:  0.01 Time: 00:15:53\n",
      "Episode:   450 Score: -64.89948309893549  Avg.Score: -12.11, eps-greedy:  0.01 Time: 00:16:15\n",
      "Episode:   460 Score: 191.59929747470179  Avg.Score: 1.83, eps-greedy:  0.01 Time: 00:16:37\n",
      "Episode:   470 Score: 153.36695672542496  Avg.Score: 23.06, eps-greedy:  0.01 Time: 00:16:57\n",
      "Episode:   480 Score: 129.40440953551982  Avg.Score: 47.76, eps-greedy:  0.01 Time: 00:17:15\n",
      "Episode:   490 Score: 235.87429844975682  Avg.Score: 60.09, eps-greedy:  0.01 Time: 00:17:31\n",
      "Episode:   500 Score: 145.72787417643744  Avg.Score: 64.02, eps-greedy:  0.01 Time: 00:17:44\n",
      "Episode:   510 Score: 21.731489693184358  Avg.Score: 63.18, eps-greedy:  0.01 Time: 00:18:01\n",
      "Episode:   520 Score: -19.69740254857139  Avg.Score: 80.35, eps-greedy:  0.01 Time: 00:18:19\n",
      "Episode:   530 Score: 268.5323333336088  Avg.Score: 97.34, eps-greedy:  0.01 Time: 00:18:30\n",
      "Episode:   540 Score: 266.9270270639854  Avg.Score: 114.55, eps-greedy:  0.01 Time: 00:18:38\n",
      "Episode:   550 Score: 24.618978995383515  Avg.Score: 120.96, eps-greedy:  0.01 Time: 00:18:46\n",
      "Episode:   560 Score: 271.4809166861627  Avg.Score: 129.79, eps-greedy:  0.01 Time: 00:18:57\n",
      "Episode:   570 Score: -110.42080103984318  Avg.Score: 133.75, eps-greedy:  0.01 Time: 00:19:04\n",
      "Episode:   580 Score: 212.1556203796742  Avg.Score: 133.56, eps-greedy:  0.01 Time: 00:19:14\n",
      "Episode:   590 Score: 255.0787415757521  Avg.Score: 144.09, eps-greedy:  0.01 Time: 00:19:22\n",
      "Episode:   600 Score: 270.6213645982825  Avg.Score: 167.10, eps-greedy:  0.01 Time: 00:19:30\n",
      "Episode:   610 Score: 301.1184368280439  Avg.Score: 179.35, eps-greedy:  0.01 Time: 00:19:38\n",
      "Episode:   620 Score: 281.55753941328317  Avg.Score: 181.18, eps-greedy:  0.01 Time: 00:19:49\n",
      "Episode:   630 Score: 272.340680533503  Avg.Score: 178.30, eps-greedy:  0.01 Time: 00:19:55\n",
      "Episode:   640 Score: 261.98486893558766  Avg.Score: 173.19, eps-greedy:  0.01 Time: 00:20:02\n",
      "Episode:   650 Score: 245.88754825609752  Avg.Score: 181.92, eps-greedy:  0.01 Time: 00:20:13\n",
      "Episode:   660 Score: 277.6805610143983  Avg.Score: 186.59, eps-greedy:  0.01 Time: 00:20:19\n",
      "Episode:   670 Score: 160.8057728334742  Avg.Score: 194.88, eps-greedy:  0.01 Time: 00:20:30\n",
      "Episode:   680 Score: 274.11623504925933  Avg.Score: 194.83, eps-greedy:  0.01 Time: 00:20:42\n",
      "\n",
      " Environment solved in 687 episodes!\tAverage Score: 203.03\n"
     ]
    }
   ],
   "source": [
    "def train():    \n",
    "\n",
    "    scores_deque = deque(maxlen=100)\n",
    "    scores_array = []\n",
    "    avg_scores_array = []    \n",
    "    \n",
    "    time_start = time.time()\n",
    "\n",
    "    for i_episode in range(num_episodes):\n",
    "        eps = epsilon_annealing(i_episode, max_eps_episode, min_eps)\n",
    "        score = run_episode(env, agent, eps)\n",
    "\n",
    "        scores_deque.append(score)\n",
    "        scores_array.append(score)\n",
    "        \n",
    "        avg_score = np.mean(scores_deque)\n",
    "        avg_scores_array.append(avg_score)\n",
    "\n",
    "        dt = (int)(time.time() - time_start)\n",
    "            \n",
    "        if i_episode % print_every == 0 and i_episode > 0:\n",
    "            print('Episode: {:5} Score: {:5}  Avg.Score: {:.2f}, eps-greedy: {:5.2f} Time: {:02}:{:02}:{:02}'.\\\n",
    "                    format(i_episode, score, avg_score, eps, dt//3600, dt%3600//60, dt%60))\n",
    "            \n",
    "        if len(scores_deque) == scores_deque.maxlen:\n",
    "            ### threshold = 200\n",
    "            if np.mean(scores_deque) >= threshold: \n",
    "                print('\\n Environment solved in {:d} episodes!\\tAverage Score: {:.2f}'. \\\n",
    "                    format(i_episode, np.mean(scores_deque)))\n",
    "                break\n",
    "\n",
    "                        \n",
    "        if i_episode % TARGET_UPDATE == 0:\n",
    "            agent.q_target.load_state_dict(agent.q_local.state_dict()) \n",
    "    \n",
    "    return scores_array, avg_scores_array\n",
    "\n",
    "scores, avg_scores = train()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "length of scores:  688 , len of avg_scores:  688\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "print('length of scores: ', len(scores), ', len of avg_scores: ', len(avg_scores))\n",
    "\n",
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111)\n",
    "plt.plot(np.arange(1, len(scores)+1), scores, label=\"Score\")\n",
    "plt.plot(np.arange(1, len(avg_scores)+1), avg_scores, label=\"Avg on 100 episodes\")\n",
    "plt.legend(bbox_to_anchor=(1.05, 1)) \n",
    "plt.ylabel('Score')\n",
    "plt.xlabel('Episodes #')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "save('dir_chk', 'LunarLander-v2')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ml2-kernel",
   "language": "python",
   "name": "ml2-kernel"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
